<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"  
    xmlns:h="http://java.sun.com/jsf/html"  
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:p="http://primefaces.org/ui"
    template="/plantillas/plantilla-sistema.xhtml"> 
    <f:metadata>
        <f:event type="preRenderView" 
                 listener="#{rolBean.validarAcceso}"/>
    </f:metadata>
    <ui:define name="cabecera">
         <title>Gestión de Roles</title>
        <link rel="shortcut icon"  
              href="/resources/imagenes/favicon.ico" />
    </ui:define>    
    <ui:define name="contenido">
        <center>         
            <p:panel 
                header="Listado de Roles"               
                styleClass="contenido">
                <h:form 
                    id="tablaRolFrm"> 
                   <p:dataTable 
                        id="tablaRolDtb" 
                        emptyMessage="No hay registros disponibles."
                        value="#{rolBean.listaEntidades}" 
                        var="rol" 
                        selectionMode="single"
                        rowKey="#{rol.codigorol}"
                        rows="10"
                        paginator="true"
                        paginatorPosition="bottom"
                        resizableColumns="true">                       
                        <p:column 
                            headerText="Privilegio"
                            sortBy="#{rol.nombre}"
                            filterBy="#{rol.nombre}"
                            filterMatchMode="contains"
                            styleClass="columna">
                            <h:outputText 
                                value="#{rol.nombre}"  />
                        </p:column>                     
                        <p:column 
                            headerText="Descripción"
                            sortBy="#{rol.descripcion}"
                            filterBy="#{rol.descripcion}"
                            filterMatchMode="contains"
                            styleClass="columna">
                            <h:outputText 
                                value="#{rol.descripcion}"  />
                        </p:column>
                        <p:column 
                            headerText="Privilegios"
                            styleClass="columna"
                            rendered="#{sesionBean.verificarPermiso('conceder','privilegio')}">
                            <center>
                                <p:commandButton 
                                    id="privilegiosBtn"
                                    icon="ui-icon-search"
                                    title="Ver"
                                    actionListener="#{rolBean.setEntidad(rol)}"
                                    update=":privilegiosFrm:tablaPrivilegioDtb"
                                    oncomplete="privilegiosWgt.show()"/>
                            </center>
                        </p:column>
                        <p:column 
                            headerText="Modificar" 
                            styleClass="columna"
                            rendered="#{sesionBean.verificarPermiso('modificar','rol')}"> 
                                <p:commandButton 
                                    id="modificarBtn" 
                                    icon="ui-icon-pencil"
                                    title="Modificar" 
                                    actionListener="#{rolBean.prepararModificacion(rol)}" 
                                    update=":guardarRolFrm" 
                                    oncomplete="guardarRolWgt.show()" />
                        </p:column>
                        <p:column 
                            headerText="Eliminar"
                            styleClass="columna"
                            rendered="#{sesionBean.verificarPermiso('eliminar','rol')}">
                            <p:commandButton 
                                id="eliminarBtn"
                                icon="ui-icon-trash"
                                title="Eliminar" 
                                actionListener="#{rolBean.prepararEliminacion(rol)}" 
                                update="@form" 
                                oncomplete="confirmacionWgt.show()" />
                        </p:column>                            
                           <f:facet name="footer">
                               <p:commandButton 
                                   value="Nuevo Rol" 
                                    actionListener="#{rolBean.prepararAdicion}" 
                                    update=":guardarRolFrm" 
                                    title="Agregar un nuevo rol"
                                    oncomplete="guardarRolWgt.show()" 
                                    style="float:left; font-size: 110%" 
                                    rendered="#{sesionBean.verificarPermiso('agregar','rol')}"/>
                            </f:facet>                       
                        </p:dataTable>
                    </h:form>
            </p:panel>
     </center>       
    </ui:define>      
    <ui:define name="extra">       
        <!-- Diálogo de privilegios -->
        <p:dialog 
            id="privilegiosDlg" 
            widgetVar="privilegiosWgt"
            header="Listado de Privilegios"   
            modal="true" 
            resizable="false"
            closable="false"
            draggable="false"
            dynamic="true"
            width="900"
            style="font-size: 85%"
            rendered="#{sesionBean.verificarPermiso('conceder','privilegio')}">
            <h:form id="privilegiosFrm">             
                <p:dataTable 
                    id="tablaPrivilegioDtb" 
                    emptyMessage="No hay registros disponibles."
                    value="#{rolBean.entidad.otorgamientos}" 
                    var="otorgamiento" 
                    selection="single"
                    rowKey="#{otorgamiento.privilegio.codigoprivilegio}"
                    rows="10"
                    paginator="true"
                    paginatorPosition="bottom" >             
                        <p:column 
                            headerText="Privilegio"
                            sortBy="#{otorgamiento.privilegio.nombre}" 
                            filterBy="#{otorgamiento.privilegio.nombre}" 
                            filterMatchMode="contains"
                            styleClass="columna">  
                            <h:outputText 
                                value="#{otorgamiento.privilegio.nombre}" />  
                        </p:column>                    
                        <p:column 
                            headerText="Operación"
                            styleClass="columna"
                            sortBy="#{otorgamiento.privilegio.operacion.nombre}"
                            filterBy="#{otorgamiento.privilegio.operacion.nombre}"
                            filterOptions="#{rolBean.itemsOperacion}">
                            <h:outputText 
                                value="#{otorgamiento.privilegio.operacion.nombre}" />  
                        </p:column>         
                        <p:column headerText="Objeto"
                                  styleClass="columna"
                                  sortBy="#{otorgamiento.privilegio.objeto.nombre}"
                                  filterBy="#{otorgamiento.privilegio.objeto.nombre}"
                                  filterOptions="#{rolBean.itemsObjeto}">  
                            <h:outputText value="#{otorgamiento.privilegio.objeto.nombre}" />  
                        </p:column>
                                                            
                        <p:column headerText="Permiso"
                                  styleClass="columna"
                                  filterBy="#{otorgamiento.concedido ? 'Habilitado' : 'Deshabilitado'}"
                                  filterOptions="#{rolBean.itemsPrivilegios}">  
                            <h:outputText value="#{otorgamiento.concedido ? 'Habilitado' : 'Deshabilitado'}" />  
                        </p:column>
                                        
                        <p:column headerText="Opciones"
                                  styleClass="columna">  
                            <p:selectBooleanButton value="#{otorgamiento.concedido}" 
                                                   onLabel="Revocar" 
                                                   offLabel="Conceder">
                                <p:ajax listener="#{rolBean.actualizarPrivilegio(otorgamiento)}" 
                                        update="@form" />
                            </p:selectBooleanButton>
                        </p:column>                                    
                </p:dataTable>               
                <p:commandButton 
                    value="Cerrar"
                    title="Cerrar ventana"
                    icon="ui-icon-close"
                    oncomplete="privilegiosWgt.hide()" 
                    style="float:right; font-size: 85%"/>              
            </h:form>
        </p:dialog>       
        <!-- Diálogo de inserción/modificación de privilegio -->
        <p:dialog 
            id="guardarRolDlg" 
            widgetVar="guardarRolWgt"
            header="Datos del Rol"   
            modal="true" 
            resizable="false" 
            width="300"
            closable="false"
            draggable="false"
            style="font-size: 85%"
            rendered="#{sesionBean.verificarPermiso('agregar','rol') or
                        sesionBean.verificarPermiso('modificar','rol')}">
            <h:form 
                id="guardarRolFrm">
                <p:messages 
                    id="mensajesMsg"  
                    globalOnly="true"/>
                <h:panelGrid 
                    columns="3"
                     style="margin-top:20px; margin-bottom:20px; font-size: 85%">  
                    <h:outputLabel 
                        for="nombreTxt" 
                       value="Nombre del rol:"/>
                    <p:inputText 
                        id="nombreTxt" 
                         value="#{rolBean.entidad.nombre}">
                        <f:attribute 
                            name="regex" 
                            value="#{regex.nombre}" />
                        <f:validator 
                            validatorId="regexValidator" />
                    </p:inputText>
                    <p:panel 
                        style="border:none; font-size: 85%">
                        <p:tooltip 
                            for="nombreTxt" 
                            showEvent="mouseover" 
                            hideEvent="mouseout" 
                            rendered="#{rolBean.tieneErrores('guardarRolFrm:nombreTxt')}">
                            <p:message 
                                id="nombreMsg" 
                                for="nombreTxt"
                                display="text" />
                        </p:tooltip>
                    </p:panel>
                    <p:column>
                        <h:outputLabel 
                            for="descripcionTxa" 
                            value="Descripción: "/>
                        <br/>
                        <h:outputText 
                            id="descripcioncontador" 
                            style="font-size: 80%"/>
                    </p:column>                    
                    <p:inputTextarea 
                        id="descripcionTxa" 
                        value="#{rolBean.entidad.descripcion}"
                        required="true"
                        maxlength="500"
                        counter="descripcioncontador"
                        counterTemplate="Restan {0} caracteres."
                        autoResize="false" />
                    <p:panel 
                        style="border:none; font-size: 85%">
                        <p:tooltip 
                            for="descripcionTxa" 
                            showEvent="mouseover" 
                            hideEvent="mouseout" 
                            rendered="#{rolBean.tieneErrores('guardarRolFrm:descripcionTxa')}">
                            <p:message 
                                id="descripcionMsg" 
                                for="descripcionTxa"
                                display="text" />
                        </p:tooltip>
                    </p:panel>    
                </h:panelGrid>                 
                <p:separator />
                <br/>
                <p:commandButton 
                    value="Guardar"
                    title="Guardar los datos"
                    actionListener="#{rolBean.guardarEntidad}"
                    update="@form,:tablaRolFrm:tablaRolDtb" 
                    oncomplete="if ( !args.validationFailed ) 
                                guardarRolWgt.hide();" 
                    icon="ui-icon-disk" 
                    style="float:right; font-size: 85%" />             
                <p:commandButton 
                    value="Cancelar"
                    title="Cerrar la ventana"
                    actionListener="#{rolBean.revertirCambios}"
                    onclick="guardarRolWgt.hide();" 
                    immediate="true"
                    icon="ui-icon-cancel" 
                    style="float:right; font-size: 85%" />
            </h:form>
        </p:dialog>      
        <!-- Diálogo de confirmación de eliminación -->
        <p:confirmDialog 
            id="confirmacionDlg" 
            message="¿Está seguro que desea eliminar éste registro?" 
            header="Eliminar Rol" 
            widgetVar="confirmacionWgt" 
            severity="alert"
            width="300"
            closable="false"
            style="font-size: 85%"
            rendered="#{sesionBean.verificarPermiso('eliminar','rol')}">   
            <h:form>
            <p:messages 
             id="mensajesMsg" 
             globalOnly="true" />
            
                    <p:commandButton 
                        value="Eliminar"
                        title="Confirmar eliminación"
                        actionListener="#{rolBean.eliminarEntidad}"
                        update="@form,:tablaRolFrm:tablaRolDtb"
                        oncomplete="if ( !args.validationFailed ) confirmacionWgt.hide()"
                        style="float:right; font-size: 85%"
                        icon="ui-icon-trash" />                  
                    <p:commandButton 
                        value="Cancelar"
                        title="Cancelar eliminación"
                        update="@form"
                        oncomplete="confirmacionWgt.hide()" 
                        style="float:right; font-size: 85%"
                        icon="ui-icon-cancel" >
                        <f:setPropertyActionListener 
                            target="#{rolBean.operacionActual}" 
                            value="NINGUNA" />
                    </p:commandButton>
                    
            </h:form>
        </p:confirmDialog>
    </ui:define>    
</ui:composition>
